export default function updateNodeElement(element, virtualDOM, oldVirtualDOM) {
  const newProps = virtualDOM && virtualDOM.props || {}
  const oldProps = oldVirtualDOM && oldVirtualDOM.props || {}
  Object.keys(newProps).forEach(propName => {
    // 获取属性值
    const newPropValue = newProps[propName]
    const oldPropValue = oldProps[propName]
    if (newPropValue !== oldPropValue) {
      // 事件属性 onClick -> click
      if (propName.slice(0, 2) === 'on') {
        // 事件名称
        const enventName = propName.toLowerCase().slice(2)
        // 为元素添加事件
        element.addEventListener(enventName, newPropValue)
        // 删除原有的事件处理函数
        if (oldPropValue) {
          element.removeEventListener(enventName, oldPropValue)
        }

      } else if (propName === 'value' || propName === 'checked') {
        element[propName] = newPropValue
      } else if (propName !== 'children') {
        if (propName === 'className') {
          element.setAttribute('class', newPropValue)
        } else {
          element.setAttribute(propName, newPropValue)
        }
      }
    }
  })
  // 判断属性被删除的情况
  Object.keys(oldProps).forEach(propName => {
    const newPropsValue = newProps[propName]
    const oldPropsValue = oldProps[propName]
    // 属性被删除了
    if (!newPropsValue) {
      if (propName.slice(0, 2) === 'on') {
        const eventName = propName.toLowerCase().slice(2)
        element.removeEventListener(eventName, oldPropsValue)
      } else if (propName !== 'children') {
        element.removeAttribute(propName)
      }
    }
  })
}